<template>
  <div class="page_root" :key="queryUpdateFlag" data-page-name="行动项任务完成审批详情页" data-page-identification="t_0qmx2r0fpk">
    <a-spin :spinning="pageLoading.loading" :tip="pageLoading.tip">
      <!-- begin vid_a66h2jgxek 容器_ak0v3kpvfq -->
      <al-box class="vid_a66h2jgxek">
        <!-- begin vid_9nsvbc1f6j 容器_i1rv56okv5 -->
        <al-box class="vid_9nsvbc1f6j">
          <!-- begin vid_uyj2uv5ibi 容器_ss25z4s2o7 -->
          <al-box class="vid_uyj2uv5ibi">
            <!-- begin vid_sfilmvv65x 行动项任务完成审批详情 -->
            <span class="vid_sfilmvv65x"> 行动项任务完成审批详情 </span>
            <!-- end vid_sfilmvv65x 行动项任务完成审批详情 -->
          </al-box>
          <!-- end vid_uyj2uv5ibi 容器_ss25z4s2o7 -->
          <!-- begin vid_ppb2kq80et 布局容器_t5z9huy8iv -->
          <a-row class="vid_ppb2kq80et" :gutter="16" :slots="'5:5:5:5:4'">
            <a-col :span="5">
              <!-- begin vid_agftkz8uz8 项目名称： -->
              <span class="vid_agftkz8uz8"> 项目名称： </span>
              <!-- end vid_agftkz8uz8 项目名称： -->
              <!-- begin vid_ltuvtwx2zg 简单文本_pqjn8a3h7f -->
              <span class="vid_ltuvtwx2zg">
                {{ renderStringInTemplate(vid_ltuvtwx2zg_props.rt_text) }}
              </span>
              <!-- end vid_ltuvtwx2zg 简单文本_pqjn8a3h7f -->
            </a-col>
            <a-col :span="5">
              <!-- begin vid_jysgpgn70j 行动项任务名称： -->
              <span class="vid_jysgpgn70j"> 行动项任务名称： </span>
              <!-- end vid_jysgpgn70j 行动项任务名称： -->
              <!-- begin vid_e3r18s2bw7 简单文本_bwjn7m9rje -->
              <span class="vid_e3r18s2bw7">
                {{ renderStringInTemplate(vid_e3r18s2bw7_props.rt_text) }}
              </span>
              <!-- end vid_e3r18s2bw7 简单文本_bwjn7m9rje -->
            </a-col>
            <a-col :span="5">
              <!-- begin vid_1v0502ako2 任务状态： -->
              <span class="vid_1v0502ako2"> 任务状态： </span>
              <!-- end vid_1v0502ako2 任务状态： -->
              <!-- begin vid_9zk7il8n5j 简单文本_d7327751eq -->
              <span class="vid_9zk7il8n5j">
                {{ renderStringInTemplate(vid_9zk7il8n5j_props.rt_text) }}
              </span>
              <!-- end vid_9zk7il8n5j 简单文本_d7327751eq -->
            </a-col>
            <a-col :span="5">
              <!-- begin vid_atnq6bu02c 实际工时： -->
              <span class="vid_atnq6bu02c"> 实际工时： </span>
              <!-- end vid_atnq6bu02c 实际工时： -->
              <!-- begin vid_8zh0qbun6j 简单文本_g5rrnfw99z -->
              <span class="vid_8zh0qbun6j">
                {{ renderStringInTemplate(vid_8zh0qbun6j_props.rt_text) }}
              </span>
              <!-- end vid_8zh0qbun6j 简单文本_g5rrnfw99z -->
            </a-col>
            <a-col :span="4">
              <!-- begin vid_w0xdzipnk7 任务负责人： -->
              <span class="vid_w0xdzipnk7"> 任务负责人： </span>
              <!-- end vid_w0xdzipnk7 任务负责人： -->
              <!-- begin vid_6b8gi9vt1t 简单文本_5fssxxjhxd -->
              <span class="vid_6b8gi9vt1t">
                {{ renderStringInTemplate(vid_6b8gi9vt1t_props.rt_text) }}
              </span>
              <!-- end vid_6b8gi9vt1t 简单文本_5fssxxjhxd -->
            </a-col>
          </a-row>
          <!-- end vid_ppb2kq80et 布局容器_t5z9huy8iv -->
          <!-- begin vid_kwv8zhoikx 布局容器_91f7nr9r42 -->
          <a-row class="vid_kwv8zhoikx" :gutter="16" :slots="'5:5:5:5:4'">
            <a-col :span="5">
              <!-- begin vid_tux0dci8di 审核员： -->
              <span class="vid_tux0dci8di"> 审核员： </span>
              <!-- end vid_tux0dci8di 审核员： -->
              <!-- begin vid_c9m7cut7tt 简单文本_c552lx9tnu -->
              <span class="vid_c9m7cut7tt">
                {{ renderStringInTemplate(vid_c9m7cut7tt_props.rt_text) }}
              </span>
              <!-- end vid_c9m7cut7tt 简单文本_c552lx9tnu -->
            </a-col>
            <a-col :span="5">
              <!-- begin vid_7nubv3p02k PMO： -->
              <span class="vid_7nubv3p02k"> PMO： </span>
              <!-- end vid_7nubv3p02k PMO： -->
              <!-- begin vid_gg2vcissql 简单文本_ct3rd0wz6r -->
              <span class="vid_gg2vcissql">
                {{ renderStringInTemplate(vid_gg2vcissql_props.rt_text) }}
              </span>
              <!-- end vid_gg2vcissql 简单文本_ct3rd0wz6r -->
            </a-col>
            <a-col :span="5">
              <!-- begin vid_sakznfmij6 任务执行人： -->
              <span class="vid_sakznfmij6"> 任务执行人： </span>
              <!-- end vid_sakznfmij6 任务执行人： -->
              <!-- begin vid_7fbyrryred 简单文本_mw91zngxi8 -->
              <span class="vid_7fbyrryred">
                {{ renderStringInTemplate(vid_7fbyrryred_props.rt_text) }}
              </span>
              <!-- end vid_7fbyrryred 简单文本_mw91zngxi8 -->
            </a-col>
            <a-col :span="5">
              <!-- begin vid_ivzokfp55r 计划开始时间： -->
              <span class="vid_ivzokfp55r"> 计划开始时间： </span>
              <!-- end vid_ivzokfp55r 计划开始时间： -->
              <!-- begin vid_r9nxk50zzc 简单文本_msgj1zhdlj -->
              <span class="vid_r9nxk50zzc">
                {{ renderStringInTemplate(vid_r9nxk50zzc_props.rt_text) }}
              </span>
              <!-- end vid_r9nxk50zzc 简单文本_msgj1zhdlj -->
            </a-col>
            <a-col :span="4">
              <!-- begin vid_dr97vtck99 实际开始时间： -->
              <span class="vid_dr97vtck99"> 实际开始时间： </span>
              <!-- end vid_dr97vtck99 实际开始时间： -->
              <!-- begin vid_ye5uh113wl 简单文本_8gj7z6ul86 -->
              <span class="vid_ye5uh113wl">
                {{ renderStringInTemplate(vid_ye5uh113wl_props.rt_text) }}
              </span>
              <!-- end vid_ye5uh113wl 简单文本_8gj7z6ul86 -->
            </a-col>
          </a-row>
          <!-- end vid_kwv8zhoikx 布局容器_91f7nr9r42 -->
          <!-- begin vid_5pc2cfdgha 布局容器_2zmnrhl10m -->
          <a-row class="vid_5pc2cfdgha" :gutter="16" :slots="'5:5:14'">
            <a-col :span="5">
              <!-- begin vid_tnaamz681m 计划结束时间： -->
              <span class="vid_tnaamz681m"> 计划结束时间： </span>
              <!-- end vid_tnaamz681m 计划结束时间： -->
              <!-- begin vid_rcznv5aije 简单文本_i016lvgpse -->
              <span class="vid_rcznv5aije">
                {{ renderStringInTemplate(vid_rcznv5aije_props.rt_text) }}
              </span>
              <!-- end vid_rcznv5aije 简单文本_i016lvgpse -->
            </a-col>
            <a-col :span="5">
              <!-- begin vid_m06a31o2nx 提交时间： -->
              <span class="vid_m06a31o2nx"> 提交时间： </span>
              <!-- end vid_m06a31o2nx 提交时间： -->
              <!-- begin vid_8fbtsshq63 简单文本_rjfw0b5za8 -->
              <span class="vid_8fbtsshq63">
                {{ renderStringInTemplate(vid_8fbtsshq63_props.rt_text) }}
              </span>
              <!-- end vid_8fbtsshq63 简单文本_rjfw0b5za8 -->
            </a-col>
            <a-col :span="14">
              <!-- begin vid_8uuh9hnqpw 提交人： -->
              <span class="vid_8uuh9hnqpw"> 提交人： </span>
              <!-- end vid_8uuh9hnqpw 提交人： -->
              <!-- begin vid_86g66vqc41 简单文本_xpla0pij8d -->
              <span class="vid_86g66vqc41">
                {{ renderStringInTemplate(vid_86g66vqc41_props.rt_text) }}
              </span>
              <!-- end vid_86g66vqc41 简单文本_xpla0pij8d -->
            </a-col>
          </a-row>
          <!-- end vid_5pc2cfdgha 布局容器_2zmnrhl10m -->
        </al-box>
        <!-- end vid_9nsvbc1f6j 容器_i1rv56okv5 -->
        <!-- begin vid_uqx3hvld89 容器_wu3rn4oyaj -->
        <al-box class="vid_uqx3hvld89">
          <!-- begin vid_iuiddidlcp 容器_6xdfws9ti9 -->
          <al-box class="vid_iuiddidlcp">
            <!-- begin vid_npoudj99b1 完成标准 -->
            <span class="vid_npoudj99b1"> 完成标准 </span>
            <!-- end vid_npoudj99b1 完成标准 -->
          </al-box>
          <!-- end vid_iuiddidlcp 容器_6xdfws9ti9 -->
          <!-- begin vid_jzfk4gd7oq 容器_cwjb67qauq -->
          <al-box class="vid_jzfk4gd7oq">
            <!-- begin vid_enbhdwnwu8 文本域_dybcf3zqqp -->
            <a-textarea class="vid_enbhdwnwu8" v-model:value="vid_enbhdwnwu8_props.value" :disabled="true" :autoSize="true"> </a-textarea>
            <!-- end vid_enbhdwnwu8 文本域_dybcf3zqqp -->
          </al-box>
          <!-- end vid_jzfk4gd7oq 容器_cwjb67qauq -->
        </al-box>
        <!-- end vid_uqx3hvld89 容器_wu3rn4oyaj -->
        <!-- begin vid_kek9mcs93b 容器_xt24tajwnp -->
        <al-box class="vid_kek9mcs93b">
          <!-- begin vid_i5q6ublpon 容器_d18nnda8br -->
          <al-box class="vid_i5q6ublpon">
            <!-- begin vid_fty1g7gff7 任务附件 -->
            <span class="vid_fty1g7gff7"> 任务附件 </span>
            <!-- end vid_fty1g7gff7 任务附件 -->
          </al-box>
          <!-- end vid_i5q6ublpon 容器_d18nnda8br -->
          <!-- begin vid_qa53gc55by 容器_oydpzmh7vg -->
          <al-box class="vid_qa53gc55by">
            <!-- begin vid_i0r6qe6rvx 自定义模板_jqzyvlgmbz -->
            <!--                  预览-->
            <a-modal v-model:visible="stateF.previewVisible" @cancel="handleCancel" width="1000px" title="图片预览" :footer="null">
              <div v-if="stateF.isImagePreview">
                <img :src="stateF.previewImage" alt="附件" style="width: 100%" />
              </div>
              <div v-else>
                <iframe :src="stateF.previewFileUrl" style="width: 100%; height: 500px"></iframe>
              </div>
            </a-modal>
            <!--                  预览-->
            <div class="file-main">
              <div v-for="(item, index) in ppmEnclosureInfoList" :key="index" class="file-item">
                <a-tooltip placement="top" :overlayStyle="standardStyle" color="#fff">
                  <template #title>
                    <p style="color: #262626; margin: 0">{{ item.name }} {{ text }}</p>
                  </template>
                  <div class="file-name">{{ item.name }}</div>
                </a-tooltip>
                <a-button :disabled="!item.type.startsWith('image')" type="link" @click="previewAttachment(item)">预览</a-button>
                <a-button type="link" @click="handlerDownload(item)">下载</a-button>
              </div>
            </div>
            <!-- end vid_i0r6qe6rvx 自定义模板_jqzyvlgmbz -->
          </al-box>
          <!-- end vid_qa53gc55by 容器_oydpzmh7vg -->
        </al-box>
        <!-- end vid_kek9mcs93b 容器_xt24tajwnp -->
      </al-box>
      <!-- end vid_a66h2jgxek 容器_ak0v3kpvfq -->
    </a-spin>
  </div>
</template>
<script setup lang="tsx">
  import {
      h, ref, reactive, toRaw, markRaw, watch, computed,
      onBeforeMount, onMounted, onBeforeUnmount, onUnmounted, onActivated, onDeactivated
    } from "vue";
    import { useRoute, useRouter } from 'vue-router';
    const router = useRouter();
    const route = useRoute();
    import { get, post, put, del, request, requestWithHeaders } from '@/utils/http/Axios';
    import { cloneDeep, localGet, merge, getDifferenceArray, traversalTreeStructure, checkCaseCondition, renderStringInTemplate, handleBreadcrumbJump, throttle, permission, getComponentParamsValue } from '@/utils/index';
    import { isNullOrEmpty, isEmptyArr, isNullOrUnDef, isContained, isArray, isEmpty, isObject } from '@/utils/is';
    import dayjs from 'dayjs';
    import { getPagePcChartsDataSourceConvert } from '@/utils/chart';
    import { message, notification, Modal } from 'ant-design-vue'
    import { propertyFormatByNumber, propertyFormatByPercentage, propertyFormatByDate, parseSubFromDataList } from '@/utils/format';
    import colorTheme from '@/design/custom-theme.json';
    
    import UserTableRecords from '@/model/UserTableRecords';
    import { getAppBaseUrl } from '@/utils/index';
    import { sendToken } from "@/hooks/useIframeToken";
    import { useSystemStore } from "@/store/modules/system";
    const systemStore = useSystemStore();
    



      // 获取传入的流程ID和组件参数
      const props = defineProps({
            'processInstanceId': {
            type: [String,Number,Boolean],
            default: undefined,
        },
      })
      const immediateWatch = (source, callback) => {
        watch(source, callback, {deep: true,immediate: true })
      }



  /* -------------------------- 属性定义 -------------------------- */

      const setTimeOutList = [];
      const pageLoading = reactive({
        loading: false,
        tip: undefined
      });
      const authInfo = localGet('app-user-store');

    const vid_ltuvtwx2zg_props = reactive({
          rt_text: undefined,
  })

    const vid_e3r18s2bw7_props = reactive({
          rt_text: undefined,
  })

    const vid_9zk7il8n5j_props = reactive({
          rt_text: undefined,
  })

    const vid_8zh0qbun6j_props = reactive({
          rt_text: undefined,
  })

    const vid_6b8gi9vt1t_props = reactive({
          rt_text: undefined,
  })

    const vid_c9m7cut7tt_props = reactive({
          rt_text: undefined,
  })

    const vid_gg2vcissql_props = reactive({
          rt_text: undefined,
  })

    const vid_7fbyrryred_props = reactive({
          rt_text: undefined,
  })

    const vid_r9nxk50zzc_props = reactive({
          rt_text: undefined,
  })

    const vid_ye5uh113wl_props = reactive({
          rt_text: undefined,
  })

    const vid_rcznv5aije_props = reactive({
          rt_text: undefined,
  })

    const vid_8fbtsshq63_props = reactive({
          rt_text: undefined,
  })

    const vid_86g66vqc41_props = reactive({
          rt_text: undefined,
  })

    const vid_enbhdwnwu8_props = reactive({
          value: undefined,
  })



      // 处理校验
      const setSubFormName =(parentInfo, name)=>{
        return [parentInfo.parents, parentInfo.cycleIndex, name];
      }


  /* ========================== 属性定义 ========================== */


  /* -------------------------- 元素数据引用 -------------------------- */


  /* ========================== 元素数据引用 ========================== */


  /* -------------------------- 页面数据 -------------------------- */

    // 页面数据 行动项完成审批详情
    const dataConnector_conn_a4lxn61ico_response = ref();
    const dataConnector_conn_a4lxn61ico = async (additionParams = {}) => {
        const exec = async () => {
          // 获取参数
          const params = {

          };

          // 注入附加的参数
          try {
            merge(params, additionParams);
          } catch (error) {
            console.log(error)
          }

          // 判断加载提示

          // 处理URL
          let url = '/solution-ppm/api/v2/built-in-system-ppm/action_task_approve/{instanceId}';
          // 替换url中的变量
          url = url.replace('{instanceId}', String(pageParameter_state.processInstanceId))
          // 排除空参数  日期组件重置后的空参数是[null] 或者[undefined]
          Object.keys(params).forEach(key=>{ if(params[key] === null){ delete params[key] }else if( Object.prototype.toString.call(params[key]) === '[object Object]' ){ Object.keys(params[key]).forEach(childKey=>{ if(params[key][childKey] === null || (Array.isArray(params[key][childKey]) && params[key][childKey].length === 1 && isNullOrUnDef(params[key][childKey]?.[0]))){ delete params[key][childKey] }}) } });
          return get(url, params, {
                headers: undefined
              }).then(async (resp) => {
            dataConnector_conn_a4lxn61ico_response.value = resp;

            return resp;
          }).catch(async (e) => {


            return Promise.reject(e);
          }).finally(async () => {


          })
        }

          return await exec()

    }


  /* ========================== 页面数据 ========================== */



  /* -------------------------- 响应 -------------------------- */

  /* ========================== 响应 ========================== */


  /* -------------------------- 函数 -------------------------- */

  /* ========================== 函数 ========================== */


  /* -------------------------- 页面参数 -------------------------- */

    const pageParameter_state = reactive({
        'processInstanceId': props.processInstanceId ?? route.query.processInstanceId,
    })

  /* ========================== 页面参数 ========================== */


  /* -------------------------- 组件事件处理方法 -------------------------- */

    // ---------------------------- 组件数据同步 ----------------------------
    // 处理 简单文本_pqjn8a3h7f 的 rt_text 属性关联
  watch(() => dataConnector_conn_a4lxn61ico_response?.value?.data?.projectName,
    () => {
      let dataList = dataConnector_conn_a4lxn61ico_response?.value?.data?.projectName

      vid_ltuvtwx2zg_props.rt_text = dataList;
    },
    {deep: true})
  // 处理 简单文本_bwjn7m9rje 的 rt_text 属性关联
  watch(() => dataConnector_conn_a4lxn61ico_response?.value?.data?.actionTaskName,
    () => {
      let dataList = dataConnector_conn_a4lxn61ico_response?.value?.data?.actionTaskName

      vid_e3r18s2bw7_props.rt_text = dataList;
    },
    {deep: true})
  // 处理 简单文本_d7327751eq 的 rt_text 属性关联
  watch(() => dataConnector_conn_a4lxn61ico_response?.value?.data?.taskStatus,
    () => {
      let dataList = dataConnector_conn_a4lxn61ico_response?.value?.data?.taskStatus

      vid_9zk7il8n5j_props.rt_text = dataList;
    },
    {deep: true})
  // 处理 简单文本_g5rrnfw99z 的 rt_text 属性关联
  watch(() => dataConnector_conn_a4lxn61ico_response?.value?.data?.actualWorkHours,
    () => {
      let dataList = dataConnector_conn_a4lxn61ico_response?.value?.data?.actualWorkHours

      vid_8zh0qbun6j_props.rt_text = dataList;
    },
    {deep: true})
  // 处理 简单文本_5fssxxjhxd 的 rt_text 属性关联
  watch(() => dataConnector_conn_a4lxn61ico_response?.value?.data?.taskOwner,
    () => {
      let dataList = dataConnector_conn_a4lxn61ico_response?.value?.data?.taskOwner

      vid_6b8gi9vt1t_props.rt_text = dataList;
    },
    {deep: true})
  // 处理 简单文本_c552lx9tnu 的 rt_text 属性关联
  watch(() => dataConnector_conn_a4lxn61ico_response?.value?.data?.assessor,
    () => {
      let dataList = dataConnector_conn_a4lxn61ico_response?.value?.data?.assessor

      vid_c9m7cut7tt_props.rt_text = dataList;
    },
    {deep: true})
  // 处理 简单文本_ct3rd0wz6r 的 rt_text 属性关联
  watch(() => dataConnector_conn_a4lxn61ico_response?.value?.data?.projectManagementOffice,
    () => {
      let dataList = dataConnector_conn_a4lxn61ico_response?.value?.data?.projectManagementOffice

      vid_gg2vcissql_props.rt_text = dataList;
    },
    {deep: true})
  // 处理 简单文本_mw91zngxi8 的 rt_text 属性关联
  watch(() => dataConnector_conn_a4lxn61ico_response?.value?.data?.taskParticipant,
    () => {
      let dataList = dataConnector_conn_a4lxn61ico_response?.value?.data?.taskParticipant

      vid_7fbyrryred_props.rt_text = dataList;
    },
    {deep: true})
  // 处理 简单文本_msgj1zhdlj 的 rt_text 属性关联
  watch(() => dataConnector_conn_a4lxn61ico_response?.value?.data?.startTime,
    () => {
      let dataList = dataConnector_conn_a4lxn61ico_response?.value?.data?.startTime

      vid_r9nxk50zzc_props.rt_text = dataList;
    },
    {deep: true})
  // 处理 简单文本_8gj7z6ul86 的 rt_text 属性关联
  watch(() => dataConnector_conn_a4lxn61ico_response?.value?.data?.examPassTime,
    () => {
      let dataList = dataConnector_conn_a4lxn61ico_response?.value?.data?.examPassTime

      vid_ye5uh113wl_props.rt_text = dataList;
    },
    {deep: true})
  // 处理 简单文本_i016lvgpse 的 rt_text 属性关联
  watch(() => dataConnector_conn_a4lxn61ico_response?.value?.data?.endTime,
    () => {
      let dataList = dataConnector_conn_a4lxn61ico_response?.value?.data?.endTime

      vid_rcznv5aije_props.rt_text = dataList;
    },
    {deep: true})
  // 处理 简单文本_rjfw0b5za8 的 rt_text 属性关联
  watch(() => dataConnector_conn_a4lxn61ico_response?.value?.data?.submittionTime,
    () => {
      let dataList = dataConnector_conn_a4lxn61ico_response?.value?.data?.submittionTime

      vid_8fbtsshq63_props.rt_text = dataList;
    },
    {deep: true})
  // 处理 简单文本_xpla0pij8d 的 rt_text 属性关联
  watch(() => dataConnector_conn_a4lxn61ico_response?.value?.data?.submittionUser,
    () => {
      let dataList = dataConnector_conn_a4lxn61ico_response?.value?.data?.submittionUser

      vid_86g66vqc41_props.rt_text = dataList;
    },
    {deep: true})
  // 处理 文本域_dybcf3zqqp 的 value 属性关联
  watch(() => dataConnector_conn_a4lxn61ico_response?.value?.data?.finishStandard,
    () => {
      let dataList = dataConnector_conn_a4lxn61ico_response?.value?.data?.finishStandard

      vid_enbhdwnwu8_props.value = dataList;
    },
    {deep: true})
    // ============================ 组件数据同步 ============================


  /* ========================== 组件事件处理方法 ========================== */


  /* -------------------------- 生命周期 -------------------------- */
  // 用于参数变更后重新执行自定义指令
      const queryUpdateFlag = ref(0);
      onMounted(() => { ;dataConnector_conn_a4lxn61ico()

    });

    onUnmounted(() => {
      // 销毁定时器
      setTimeOutList.forEach(({ repeat, timer }) => {
        repeat ?  clearInterval(timer): clearTimeout(timer);
      });
    });

  /* ========================== 生命周期 ========================== */


  /* -------------------------- 数据关联处理 -------------------------- */





  /* -------------------------- 表单数据同步 -------------------------- */
  /* ========================== 表单数据同步 ========================== */

  /* ========================== 数据关联处理 ========================== */


  /* -------------------------- 不同组件自定义的处理逻辑 -------------------------- */

  /* ========================== 不同组件自定义的处理逻辑 ========================== */


  // ================================定制化逻辑========================================
  // 附件下载
  const ppmEnclosureInfoList = ref([])
  const taskId = ref(undefined)
  watch(() => dataConnector_conn_a4lxn61ico_response?.value,
    () => {
      ppmEnclosureInfoList.value = dataConnector_conn_a4lxn61ico_response?.value?.data.ppmEnclosureInfoList
      console.log(dataConnector_conn_a4lxn61ico_response?.value);
      console.log(ppmEnclosureInfoList.value,'ppmEnclosureInfoList');
    },
    { deep: true })
  console.log('14.20')
  pageLoading.tip = '正在下载请稍后...'
  // 图片预览

  const stateF = reactive({
    previewVisible: false,
    previewImage: '',
    previewFileUrl: '',
    isImagePreview: false
  })

  function previewAttachment(item) {
    // 检查附件类型
    if (item.type.startsWith('image')) {
      stateF.isImagePreview = true
      stateF.previewImage = item.url // 设置预览图片的URL
      stateF.previewVisible = true // 显示模态框
    } else {
      // stateF.isImagePreview = false;
      // // 如果是其他类型的文件，直接在模态框中显示
      // stateF.previewFileUrl = item.url; // 设置预览文件的URL
      message.info('目前仅支持图片预览')
    }
  }

  function handlerDownload({ url, name }) {
    pageLoading.loading = true

    function downBlob(blob) {
      const downloadElement = document.createElement('a')
      const href = window.URL.createObjectURL(blob) // 创建下载的链接
      downloadElement.href = href
      downloadElement.download = name // 下载后文件名
      document.body.appendChild(downloadElement)
      downloadElement.click() // 点击下载
      document.body.removeChild(downloadElement) // 下载完成移除元素
      window.URL.revokeObjectURL(href)
    }

    const data = new FormData()
    data.append('path', url)
    post('/solution-ppm/api/v2/built-in-system-ppm/delivery_task/downloadFile', data, {
      responseType: 'blob',
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
      }
    })
      .then(blob => {
        downBlob(blob)
      })
      .finally(() => {
        pageLoading.loading = false
      })
  }

  function downloadZip(response, name) {
    const blob = new Blob([response], { type: 'application/zip;charset=utf-8' });
    const downloadElement = document.createElement('a');
    const href = window.URL.createObjectURL(blob);
    downloadElement.href = href;
    downloadElement.download = name; // 下载后文件名
    document.body.appendChild(downloadElement);
    downloadElement.click();
    document.body.removeChild(downloadElement);
    window.URL.revokeObjectURL(href);
    return href;
  }

   watch(() => dataConnector_conn_a4lxn61ico_response?.value?.data?.taskStatus,
   () => {
     let dataList = dataConnector_conn_a4lxn61ico_response?.value?.data?.taskStatus

  //
  let text = document.querySelector('.vid_9zk7il8n5j')
  if(dataList==='完成'){
      text.style.color = '#30BF78'
  }else if(dataList==='延期'){
      text.style.color = '#E02020'
  }else if(dataList==='进行中'){
      text.style.color = '#3875FF'
  }else if(dataList==='延期完成'){
      text.style.color = '#FF9846'
  }else if(dataList==='未启动'){
      text.style.color = '#8C8C8C'
  }
  //
   },
   {deep: true})
</script>
<style lang="less" scoped>
  .page_root {
  width: 100%;
  height: 100%;
  overflow: auto;
  background-color:#F5F5F5;
  }
  .page_root :deep(.@{ant-prefix}-spin-nested-loading),
  .page_root :deep(.@{ant-prefix}-spin-container)
   {
      height: 100%;
  }
  .page_root :deep(.@{ant-prefix}-spin-container .@{ant-prefix}-table-wrapper)
   {
      display: flex;
      flex-flow: column nowrap;
      justify-content: flex-start;
  }
  .page_root :deep(.@{ant-prefix}-table)
   {
    flex: auto;
    overflow: auto;
  }
  .table-moreBtn_down {
    overflow: hidden; white-space: nowrap; text-overflow: ellipsis; width: 100px;
  }

  .table-moreBtn_menu :deep(.table-moreBtn_menu-item):hover {
    background: #ebf1ff;
  }

  /*  表格树结构样式处理，展开按钮层级增加*/
  :deep(.@{ant-prefix}-table-row-expand-icon) {
    z-index: 1;
  }
  /*  表格树结构 由于每个表格项采用自定义组件，使用绝对定位布局，开启树结构导致显示异常，暂时使用层级定位位置 */
  :deep(.@{ant-prefix}-table-row-level-1 .@{ant-prefix}-table-cell-with-append .cell-wrapper-left) {
    left: 15px !important;
    width: calc(100% - 15px);
  }
  :deep(.@{ant-prefix}-table-row-level-2 .@{ant-prefix}-table-cell-with-append .cell-wrapper-left) {
    left: 30px !important;
    width: calc(100% - 30px);
  }
  :deep(.@{ant-prefix}-table-row-level-3 .@{ant-prefix}-table-cell-with-append .cell-wrapper-left) {
    left: 45px !important;
    width: calc(100% - 45px);
  }
  :deep(.@{ant-prefix}-table-row-level-4 .@{ant-prefix}-table-cell-with-append .cell-wrapper-left) {
    left: 60px !important;
    width: calc(100% - 60px);
  }

  /* 穿梭框改变默认样式，为根据组件样式控制左右栏宽度。 */
  :deep(.@{ant-prefix}-transfer-list)
   {
      height: 100%;
      width: 50%;
  }
  .vid_a66h2jgxek{
      width:100%;
      height:750px;
      overflow-x:hidden;
      overflow-y:auto;
      display:block;
      background-color:#FFFFFF;
      box-shadow:0px 0px 0px 0px
  }
  .vid_9nsvbc1f6j{
      display:block;
      margin-bottom:24px;
      box-shadow:0px 0px 0px 0px
  }
  .vid_uyj2uv5ibi{
      display:flex;
      flex-direction:row;
      align-items:center;
      flex-wrap:undefined;
      margin-bottom:16px
  }
  .vid_sfilmvv65x{
      height:16px;
      display:flex;
      flex-direction:row;
      align-items:center;
      flex-wrap:undefined;
      padding-left:8px;
      font-weight:800;
      color:rgba(38, 38, 38, 1);
      font-size:16px;
      line-height:16px;
      border-left-style:solid;
      border-left-width:4px;
      border-left-color:#3875FF
  }
  .vid_ppb2kq80et{
      width:100%;
      display:flex;
      flex-direction:row;
      align-items:flex-start;
      flex-wrap:undefined;
      margin-bottom:8px;
      box-shadow:0px 0px 0px 0px
  }
  .vid_agftkz8uz8{
      min-width:70px;
      font-family:arial, helvetica, "microsoft yahei";;
      font-weight:400;
      color:rgba(89, 89, 89, 1)
  }
  .vid_ltuvtwx2zg{
      font-weight:600;
      color:rgba(38, 38, 38, 1)
  }
  .vid_jysgpgn70j{
      min-width:112px;
      font-family:arial, helvetica, "microsoft yahei";;
      font-weight:400;
      color:rgba(89, 89, 89, 1)
  }
  .vid_e3r18s2bw7{
      font-weight:600;
      color:rgba(38, 38, 38, 1)
  }
  .vid_1v0502ako2{
      font-family:arial, helvetica, "microsoft yahei";;
      font-weight:400;
      color:rgba(89, 89, 89, 1)
  }
  .vid_9zk7il8n5j{
      font-weight:600;
      color:rgba(38, 38, 38, 1)
  }
  .vid_atnq6bu02c{
      font-family:arial, helvetica, "microsoft yahei";;
      font-weight:400;
      color:rgba(89, 89, 89, 1)
  }
  .vid_8zh0qbun6j{
      font-weight:600;
      color:rgba(38, 38, 38, 1)
  }
  .vid_w0xdzipnk7{
      font-family:arial, helvetica, "microsoft yahei";;
      font-weight:400;
      color:rgba(89, 89, 89, 1)
  }
  .vid_6b8gi9vt1t{
      font-weight:600;
      color:rgba(38, 38, 38, 1)
  }
  .vid_kwv8zhoikx{
      width:100%;
      display:flex;
      flex-direction:row;
      align-items:flex-start;
      flex-wrap:undefined;
      margin-bottom:8px;
      box-shadow:0px 0px 0px 0px
  }
  .vid_tux0dci8di{
      font-family:arial, helvetica, "microsoft yahei";;
      font-weight:400;
      color:rgba(89, 89, 89, 1)
  }
  .vid_c9m7cut7tt{
      font-weight:600;
      color:rgba(38, 38, 38, 1)
  }
  .vid_7nubv3p02k{
      font-family:arial, helvetica, "microsoft yahei";;
      font-weight:400;
      color:rgba(89, 89, 89, 1)
  }
  .vid_gg2vcissql{
      font-weight:600;
      color:rgba(38, 38, 38, 1)
  }
  .vid_sakznfmij6{
      width:100%;
      min-width:84px;
      font-family:arial, helvetica, "microsoft yahei";;
      font-weight:400;
      color:rgba(89, 89, 89, 1)
  }
  .vid_7fbyrryred{
      max-height:40px;
      overflow-y:auto;
      font-weight:600;
      color:rgba(38, 38, 38, 1)
  }
  .vid_ivzokfp55r{
      font-family:arial, helvetica, "microsoft yahei";;
      font-weight:400;
      color:rgba(89, 89, 89, 1)
  }
  .vid_r9nxk50zzc{
      font-weight:600;
      color:rgba(38, 38, 38, 1)
  }
  .vid_dr97vtck99{
      font-family:arial, helvetica, "microsoft yahei";;
      font-weight:400;
      color:rgba(89, 89, 89, 1)
  }
  .vid_ye5uh113wl{
      font-weight:600;
      color:rgba(38, 38, 38, 1)
  }
  .vid_5pc2cfdgha{
      width:100%;
      display:flex;
      flex-direction:row;
      align-items:center;
      flex-wrap:undefined;
      box-shadow:0px 0px 0px 0px
  }
  .vid_tnaamz681m{
      font-family:arial, helvetica, "microsoft yahei";;
      font-weight:400;
      color:rgba(89, 89, 89, 1)
  }
  .vid_rcznv5aije{
      font-weight:600;
      color:rgba(38, 38, 38, 1)
  }
  .vid_m06a31o2nx{
      font-family:arial, helvetica, "microsoft yahei";;
      font-weight:400;
      color:rgba(89, 89, 89, 1)
  }
  .vid_8fbtsshq63{
      font-weight:600;
      color:rgba(38, 38, 38, 1)
  }
  .vid_8uuh9hnqpw{
      font-family:arial, helvetica, "microsoft yahei";;
      font-weight:400;
      color:rgba(89, 89, 89, 1)
  }
  .vid_86g66vqc41{
      font-weight:600;
      color:rgba(38, 38, 38, 1)
  }
  .vid_uqx3hvld89{
      display:block;
      margin-bottom:24px;
      background-color:#FFFFFF
  }
  .vid_iuiddidlcp{
      margin-bottom:16px;
      background-color:#FFFFFF
  }
  .vid_npoudj99b1{
      height:16px;
      display:flex;
      flex-direction:row;
      align-items:center;
      flex-wrap:undefined;
      padding-left:8px;
      font-weight:800;
      color:rgba(38, 38, 38, 1);
      font-size:16px;
      line-height:16px;
      border-left-style:solid;
      border-left-width:4px;
      border-left-color:#3875FF
  }
  .vid_jzfk4gd7oq{
      background-color:#FFFFFF
  }
  .vid_enbhdwnwu8{
      font-weight:400;
      color:rgba(38, 38, 38, 1);
      background-color:#FFFFFF;
      box-shadow:0px 0px 0px 0px
  }
  .vid_kek9mcs93b{
      display:block;
      background-color:#FFFFFF
  }
  .vid_i5q6ublpon{
      display:flex;
      flex-direction:row;
      align-items:center;
      flex-wrap:undefined;
      margin-bottom:16px;
      box-shadow:0px 0px 0px 0px
  }
  .vid_fty1g7gff7{
      height:16px;
      display:flex;
      flex-direction:row;
      align-items:center;
      flex-wrap:undefined;
      padding-left:8px;
      font-weight:600;
      color:rgba(38, 38, 38, 1);
      font-size:16px;
      line-height:16px;
      border-left-style:solid;
      border-left-width:4px;
      border-left-color:#3875FF
  }
  .vid_qa53gc55by{
      box-shadow:0px 0px 0px 0px
  }

  :deep(.@{ant-prefix}-table-empty .@{ant-prefix}-table-tbody tr > td) {
   padding: 0;
  }
    /deep/.ant3-checkbox-group-item + .ant3-checkbox-group-item span{
      color:#595959 !important;
    }
    /deep/.ant3-checkbox-wrapper.ant3-checkbox-wrapper-disabled span{
      color:#595959 !important;
    }
  .file-item {
    display: flex;
    width: 100%;
  }
  .file-name {
    width: 75%;
    text-overflow: ellipsis;
    white-space: nowrap;
    overflow: hidden;
  }
  .file-time,
  .file-preview,
  .file-download {
    width: 10%;
    text-align: center;
    cursor: pointer;
  }
  .file-preview,
  .file-download {
    color: #3875ff;
  }
  .vid_qa53gc55by{
    height:197px;
    box-shadow:0px 0px 0px 0px;
    display: flex;
    flex-direction: column;
  }
  .file-main{
    width: 35%;
    overflow-y: scroll;
  }
</style>